<?php
/**
 * Created by PhpStorm.
 * User: yulin
 * Date: 2018-7-17
 * Time: 15:24
 */
namespace app\open\controller;
use app\open\model;
use app\open\validate\CompanyValidate;
use app\open\validate\DepartmentValidate;

/**
 * @name【8.1 公司相关】
 * @baseurl【open/Company】
 * @file【Company.php】
 */
class Company extends Base
{
    /**
     * @name【1.1额度管理】
     * @desc【额度管理】
     * @method【post】
     * @table【p_company_recharge】
     * @param【
     * add_or_delete $ int $ 1 $ 增加或减少,1:增加,2:减少 $ 1 #
     * number $ float  $ 123456 $ 数量 $ 1 #
     * company_id $ int $ 294 $ 公司ID $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * list $ json $ $ 结果列表 #
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function companyAddOrDelete(){

        $report    = new CompanyValidate();
        $param     = $report->scene('add_or_delete')->getCurrentData();
        $report->goCheck($param);
        $company_id = json_decode($param['company_id'],true);
        $find = (new model\Company())
            ->where('company_id',$company_id)
            ->find();
        $quota = $find['quota'];
        if($param['number'] > 0) {
            if($param['add_or_delete'] == 1 && $param['number'] > 0){
                $quota += $param['number'];
            }
            elseif($param['add_or_delete'] == 2 && $param['number'] > 0){
                $param['number'] = -1*$param['number'];
                $quota += $param['number'];
                if($quota < 0){
                    $data['msg'] = '额度不能为负数';
                    return $this->res($data);
                }
            }
            (new model\Company())
                ->where('company_id', $company_id)
                ->update(['quota' => $quota]);
            $CompanyLog = (new model\CompanyLog());
            $CompanyLog->data([
                'company_id' => $company_id,
                'quota' => $param['number'],
                'datetime' => date('Y-m-d H:i:s')
            ]);
            $CompanyLog->save();
            $data['data'] = (new model\Company())
                ->where('company_id', $company_id)
                ->field('company_id,company_name,quota')
                ->find();
            return $this->res($data);
        }
        else{
            $data['msg'] = '修改金额必须大于零';
            return $this->res($data);
        }
    }

    /**
     * @name【2.1部门列表】
     * @desc【部门列表】
     * @method【post】
     * @table【p_company,p_company_dept】
     * @param【
     * name $ string $ 晋江市机关单位 $ 部门名 $  #
     * company_id $ int  $ 110 $ 所属公司ID $  #
     * parent_id $ int $ 0 $ 所属上级部门ID(parent_id=0为顶级部门) $  #
     * page $ int $ 1 $ 页数 $  #
     * pagenum $ int $ 10 $ 每页数量 $  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * list $ json $ $ 结果列表 #
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function departmentList(){

        $report    = new DepartmentValidate();
        $param     = $report->scene('list')->getCurrentData();
        $report->goCheck($param);

        $where = [];

        $param['name'] && $where['name'] = ['like', "%{$param['name']}%"];
        $param['company_id'] && $where['a.company_id'] = ['=', "{$param['company_id']}"];
        $param['parent_id'] && $where['parent_id'] = ['=', "{$param['parent_id']}"];

        $data['data'] = (new model\CompanyDept())
            ->alias('a')
            ->where($where)
            ->whereNull('a.delete_time')
            ->page($param['page'],$param['pagenum'])
            ->join('company b','a.company_id = b.company_id')
            ->field('department_id,a.company_id,name,company_name,parent_id')
            ->select();

        $data['count'] = (new model\CompanyDept())
            ->alias('a')
            ->where($where)
            ->whereNull('a.delete_time')
            ->join('company b','a.company_id = b.company_id')
            ->field('')
            ->count();
        return $this->res($data);

    }

    /**
     * @name【2.2新增部门】
     * @desc【新增部门】
     * @method【post】
     * @table【p_company_dept】
     * @param【
     * name $ string $ 晋江市机关单位 $ 部门名 $ 1 #
     * company_id $ int  $ 110 $ 所属公司ID $ 1 #
     * parent_id $ int $ 0 $ 所属上级部门ID(parent_id=0为顶级部门) $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function departmentAdd(){

        $report    = new DepartmentValidate();
        $param     = $report->scene('add')->getCurrentData();
        $report->goCheck($param);

        $CompanyDept = (new model\CompanyDept($param))
            ->allowField(true)
            ->save();
        $CompanyDept && $data['data'] = 'ok';

        return $this->res($data);

    }

    /**
     * @name【2.3编辑部门】
     * @desc【编辑部门】
     * @method【post】
     * @table【p_company_dept】
     * @param【
     * department_id $ int  $ 207 $ 部门ID $ 1 #
     * name $ string $ 晋江市机关单位 $ 部门名 $  #
     * company_id $ int  $ 107 $ 所属公司ID $  #
     * parent_id $ int $ 0 $ 所属上级部门ID(parent_id=0为顶级部门) $  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * description $ json $ $ 接口说明
     * 】
     * @author 【yulin<570214321@qq.com>】
     */
    public function departmentEdit(){

        $report    = new DepartmentValidate();
        $param     = $report->scene('edit')->getCurrentData();
        $report->goCheck($param);

        $CompanyDept = (new model\CompanyDept($param))::get($param['department_id']);
        $param['name'] && $CompanyDept->name = $param['name'];
        $param['company_id'] && $CompanyDept->company_id = $param['company_id'];
        $param['parent_id'] && $CompanyDept->parent_id = $param['parent_id'];
        $CompanyDept->save();

        return $this->res($CompanyDept);

    }

    /**
     * @name【3.1 添加公司（单位）】
     * @desc【】
     * @method【post】
     * @table【company】
     * @except【PK】
     * @param【】
     * @return【】
     * @author 【发仔<i@fazi.me>】
     */
    public function addComapny()
    {
        $rslt    = $this->addCommon(new model\Company(),new CompanyValidate());
        return $this->res($rslt);
    }

}